package org.mbcorp.sar.service.impl;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.mbcorp.sar.dao.ActividadDAO;
import org.mbcorp.sar.model.Actividad;
import org.mbcorp.sar.model.Fase;
import org.mbcorp.sar.model.Operador;
import org.mbcorp.sar.service.ActividadService;
import org.mbcorp.sar.service.ArchivoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class ActividadServiceImpl implements ActividadService {

	private static final Logger LOGGER = LoggerFactory
			.getLogger(ActividadServiceImpl.class);

	@Resource
	private ActividadDAO actividadDAO;
	
	@Autowired
	private ArchivoService archivoService;

	@Transactional
	@Override
	public Actividad grabar(Actividad created) {
		LOGGER.debug("Creando nueva actividad con informacion: " + created);

		return actividadDAO.save(created);
	}
	
	@Transactional
	@Override
	public Actividad registrarNuevaActividad(Actividad nueva, Fase fase, Operador operador) {
		LOGGER.debug("Creando nueva actividad con informacion: " + nueva);
		nueva.setFechaInicio(new Date());
		nueva.setFase(fase);
		nueva.setOperador(operador);
		return actividadDAO.save(nueva);
	}

	@Override
	public Actividad eliminar(Integer actividadId)
			throws RuntimeException {
		LOGGER.debug("Eliminando actividad con id: " +  actividadId);

		Actividad eliminado =  actividadDAO.findOne(actividadId);

		if (eliminado == null) {
			LOGGER.debug("No se encontro actividad con id: " + actividadId);
			throw new RuntimeException();
		}

		actividadDAO.delete(eliminado);
		return eliminado;
	}

	@Transactional(readOnly = true)
	@Override
	public List<Actividad> buscarTodos() {
		LOGGER.debug("Buscando todas las actividads");
		return actividadDAO.findAll();
	}

	@Transactional(readOnly = true)
	@Override
	public Actividad buscarPorId(Integer id) {
		LOGGER.debug("Buscando actividad con id: " + id);
		return actividadDAO.findOne(id);
	}

	@Transactional
	@Override
	public Actividad actualizar(Actividad actualizado)
			throws RuntimeException {
		LOGGER.debug("Actualizando actividad con informacion: " + actualizado);

		Actividad actividad = actividadDAO.findOne(actualizado.getId());

		if (actividad == null) {
			LOGGER.debug("No se encontro actividad con id: "
					+ actualizado.getId());
			throw new RuntimeException();
		}

		return actividad;
	}

	@Transactional
	public Actividad actualizarActividad(Actividad actividad){
		Actividad actualizada = this.buscarPorId(actividad.getId());
		actualizada.setDescripcion(actividad.getDescripcion());
		if(actividad.getArchivoAux().getSize() != 0){
			System.out.println("con archivo");
			actualizada.setArchivo(archivoService.generarArchivo(actividad.getArchivoAux()));
		}
		return actividadDAO.save(actualizada);
	}
    
	@Transactional
    public Actividad actualizarYCerrarActividad(Actividad actividad){
		Actividad actualizada = this.buscarPorId(actividad.getId());
		actualizada.setDescripcion(actividad.getDescripcion());
		actualizada.setFechaFin(new Date());
		if(actividad.getArchivoAux().getSize() != 0){
			System.out.println("con archivo");
			actualizada.setArchivo(archivoService.generarArchivo(actividad.getArchivoAux()));
		}
		return actividadDAO.save(actualizada);
	}
	
}
